<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    
  </style>
</head>
<body>
  
</body>
<script>

  // - reduce
  // 功能：归并
  // 参数：
      // 实参1：函数，这个函数有四个形参，这个函数会执行原数组的length次
          // 形参1：
              // 存在实参2：函数第一次执行时，表示实参2；函数之后执行时，表示上一次函数的返回值
              // 不存在实参2：函数第一次执行时，表示数组的第一个数据；函数之后执行时，表示上一次函数的返回值
          // 形参2：
              // 存在实参2：函数执行时，从第一个开始，依次表示数组的每个数据
              // 不存在实参2：函数执行时，从第二个开始，依次表示数组的每个数据
          // 形参3：表示形参2拿到的数据对应的索引
          // 形参4：表示原数组
      // 实参2：任意数据，可选
  // 返回值：最后一次函数执行的返回值
  // var arr = [7, 8, 5, 9, 4];
  // var result = arr.reduce( function(prev, val, idx, self){
  //   console.log(prev, val, idx, self);
  //   return "hello";
  // } );  
  // console.log(result);
  
  // var arr = [7, 8, 5, 9, 4];
  // var result = arr.reduce( function(prev, val, idx, self){
  //   console.log(prev, val, idx, self);
  //   return "hello";
  // } , 300);  
  // console.log(result);


  // 应用
  // var arr = [3, 5, 8, 2, 6];
  // var sum = arr.reduce(function(prev, val){
  //   return prev + val;
  // });
  // console.log(sum);
  // 第一次：prev3，val5，返回了3+5=8
  // 第二次：prev8，val8，返回了8+8=16
  // 第三次：prev16，val2，返回了16+2=18
  // 第四次：prev18，val6，返回了18+6=24
  // reduce的返回值为24
  
  // var arr = [3, 5, 8, 2, 6];
  // var sum = arr.reduce(function(prev, val){
  //   return prev + val;
  // }, 0);
  // console.log(sum);
  // 第一次：prev0，val3，返回了0+3=3
  // 第二次：prev3，val5，返回了3+5=8
  // 第三次：prev8，val8，返回了8+8=16
  // 第四次：prev16，val2，返回了16+2=18
  // 第五次：prev18，val6，返回了18+6=24
  // reduce的返回值为24


  var arr = [{price:3},{price:5},{price:8},{price:2},{price:6}];
  var sum = arr.reduce(function(prev, val){
    return prev + val.price
  }, 0);
  console.log(sum);



  // reduceRight

</script>
</html>